package cn.sunshine.framework.beans.factory;

import cn.sunshine.framework.beans.BeansException;
import cn.sunshine.framework.beans.factory.config.BeanDefinition;
import cn.sunshine.framework.beans.factory.config.BeanPostProcessor;

/**
 * @Description Configuration interface to be implemented by most listable bean factories.
 * In addition to {@link ConfigurableBeanFactory}, it provides facilities to
 * analyze and modify bean definitions, and to pre-instantiate singletons.
 * <p>
 * 集合了所有扩展 BeanFactory 的规范, DefaultListableBeanFactory 实现了此接口, 满足所有规范约束
 * @Author Mokairui
 * @Since 2021/12/11
 */
public interface ConfigurableListableBeanFactory extends ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory {

    BeanDefinition getBeanDefinition(String beanName) throws BeansException;

    void preInstantiateSingletons() throws BeansException;

    void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) throws BeansException;

}
